/*
 * Copyright 2002-2007 the original author or authors.
 */
package com.lianzt.commondata;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * 一个通用的数据包对象，可通过jms、xml等方式传输
 * 通过xml传输时，如果数据包中数组元素中存储有基本数据类型的变量(int、long、boolean等)时，会被转为String类型；xml传输不支持Object类型。
 * 如果需要传输Object类型的元素，目前只能使用jms方式
 * @author lianzt
 */ 
public class DefualtCommonData extends AbstractCommonData {

    private static final long serialVersionUID = -1;

    protected DefualtCommonData() {
        super();
    }

    /**
     * 增加一个int值
     * @param name
     * @param value
     */
    @Override
    public void putIntValue(String name, int value) {
        put(name, new CommonDataElement(name, CommonDataElement.INT, value));
    }

    @Override
    public Integer getIntValue(String name) {
        CommonDataElement mde = this.get(name);
        if (mde == null) {
            return null;
        } else {
            return (Integer) mde.getValue();
        }
    }

    @Override
    public void putLongValue(String name, long value) {
        put(name, new CommonDataElement(name, CommonDataElement.LONG, value));
    }

    @Override
    public Long getLongValue(String name) {
        CommonDataElement mde = this.get(name);
        if (mde == null) {
            return null;
        } else {
            return (Long) mde.getValue();
        }
    }

    @Override
    public void putStringValue(String name, String value) {
        put(name, new CommonDataElement(name, CommonDataElement.STRING, value));
    }

    /**
     * 增加一个带长度的String值
     * 如果length小于value.length()，截取前length位
     * @param name
     * @param value
     * @param length
     */
    @Override
    public void putStringValue(String name, String value, int length) {
        put(name, new CommonDataElement(name, CommonDataElement.STRING,
                                        value.subSequence(0, value.length() > length ? length : value.length()), length));
    }

    @Override
    public String getStringValue(String name) {
        CommonDataElement mde = this.get(name);
        if (mde == null) {
            return null;
        } else {
            return (String) mde.getValue();
        }
    }

    @Override
    public void putDoubleValue(String name, double value) {
        put(name, new CommonDataElement(name, CommonDataElement.DOUBLE, value));
    }

    @Override
    public Double getDoubleValue(String name) {
        CommonDataElement mde = this.get(name);
        if (mde == null) {
            return null;
        } else {
            return (Double) mde.getValue();
        }
    }

    @Override
    public void putBooleanValue(String name, boolean value) {
        put(name, new CommonDataElement(name, CommonDataElement.BOOLEAN, value));
    }

    @Override
    public Boolean getBooleanValue(String name) {
        CommonDataElement mde = this.get(name);
        if (mde == null) {
            return null;
        } else {
            return (Boolean) mde.getValue();
        }
    }

    @Override
    public void putFloatValue(String name, float value) {
        put(name, new CommonDataElement(name, CommonDataElement.FLOAT, value));
    }

    @Override
    public Float getFloatValue(String name) {
        CommonDataElement mde = this.get(name);
        if (mde == null) {
            return null;
        } else {
            return (Float) mde.getValue();
        }
    }

    /**
     * 增加一个数组值
     * @param name
     * @param value
     */
    @Override
    public void putArrayValue(String name, List value) {
        put(name, new CommonDataElement(name, CommonDataElement.ARRAY, value, value.size()));
    }

    @Override
    public List getArrayValue(String name) {
        CommonDataElement mde = this.get(name);
        if (mde == null) {
            return null;
        } else {
            return (List) mde.getValue();
        }
    }

    /**
     * 增加一个数据包对象值
     * @param name
     * @param value
     */
    @Override
    public void putDataValue(String name, AbstractCommonData value) {
        put(name, new CommonDataElement(name, CommonDataElement.DATA, value));
    }

    @Override
    public AbstractCommonData getDataValue(String name) {
        CommonDataElement mde = this.get(name);
        if (mde == null) {
            return null;
        } else {
            return (DefualtCommonData) mde.getValue();
        }
    }

    /**
     * 增加一个Object值
     * 会自动填充类路径
     * @param name
     * @param value
     */

    public void putObjectValue(String name, Serializable value) {
        if (value == null) {
            put(name, new CommonDataElement(name, CommonDataElement.OBJECT, null));
        } else {
            put(name, new CommonDataElement(name, CommonDataElement.OBJECT, value, value.getClass().getName()));
        }
    }
    
    /**
     * 增加一个Object值
     * 会自动填充类路径
     * @param name
     * @param value
     */
    @Override
    public void putObjectValue(String name, Object value) {
        if (value == null) {
            put(name, new CommonDataElement(name, CommonDataElement.OBJECT, null));
        } else {
            put(name, new CommonDataElement(name, CommonDataElement.OBJECT, value, value.getClass().getName()));
        }
    }

    @Override
    public Object getObjectValue(String name) {
        CommonDataElement mde = this.get(name);
        if (mde == null) {
            return null;
        } else {
            return mde.getValue();
        }
    }

    @Override
    public Date getDateValue(String name) {
        CommonDataElement mde = this.get(name);
        if (mde == null) {
            return null;
        } else {
            return (Date) mde.getValue();
        }
    }

    @Override
    public void putDateValue(String name, Date value) {
        put(name, new CommonDataElement(name, CommonDataElement.DATE, value));
    }

    @Override
    public String toString() {
        return super.toString();
    }
}
